home *** CD-ROM | disk | FTP | other *** search
/ AMIGA-CD 2 / Amiga-CD - Volume 2.iso / ungepackte_daten / 1994 / 8 / 05 / term-4.0-source.lha / CursorPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-06-26  |  7.7 KB  |  341 lines

  1. /*
  2. **    CursorPanel.c
  3. **
  4. **    Editing panel for cursor key configuration
  5. **
  6. **    Copyright © 1990-1994 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_QUALIFIER=1,GAD_UP,GAD_DOWN,GAD_RIGHT,GAD_LEFT,
  13.         GAD_USE,GAD_LOAD,GAD_SAVE,GAD_CANCEL };
  14.  
  15. VOID __regargs
  16. CursorPanel(struct CursorKeys *CursorKeys)
  17. {
  18.     struct CursorKeys    *Keys;
  19.     ULONG             OldCRC;
  20.  
  21.     OldCRC = DoCRC(CursorKeys,sizeof(struct CursorKeys));
  22.  
  23.     if(Keys = (struct CursorKeys *)AllocVecPooled(sizeof(struct CursorKeys),MEMF_ANY))
  24.     {
  25.         struct LayoutHandle *Handle;
  26.  
  27.         CopyMem(CursorKeys,Keys,sizeof(struct CursorKeys));
  28.  
  29.         if(Handle = LT_CreateHandleTags(Window -> WScreen,
  30.             LH_LocaleHook,    &LocaleHook,
  31.         TAG_DONE))
  32.         {
  33.             struct Window *Window;
  34.  
  35.             LT_New(Handle,
  36.                 LA_Type,    VERTICAL_KIND,
  37.             TAG_DONE);
  38.             {
  39.                 LT_New(Handle,
  40.                     LA_Type,    VERTICAL_KIND,
  41.                     LA_LabelID,    MSG_V36_0029,
  42.                 TAG_DONE);
  43.                 {
  44.                     LT_New(Handle,
  45.                         LA_Type,        VERTICAL_KIND,
  46.                     TAG_DONE);
  47.                     {
  48.                         LT_New(Handle,
  49.                             LA_Type,    CYCLE_KIND,
  50.                             LA_LabelID,    MSG_MACROPANEL_KEY_MODIFIER_GAD,
  51.                             LA_ID,        GAD_QUALIFIER,
  52.                             LACY_FirstLabel,MSG_MACROPANEL_NONE_TXT,
  53.                             LACY_LastLabel,    MSG_MACROPANEL_CONTROL_TXT,
  54.                         TAG_DONE);
  55.  
  56.                         LT_New(Handle,
  57.                             LA_Type,    XBAR_KIND,
  58.                         TAG_DONE);
  59.  
  60.                         LT_EndGroup(Handle);
  61.                     }
  62.  
  63.                     LT_New(Handle,
  64.                         LA_Type,        VERTICAL_KIND,
  65.                     TAG_DONE);
  66.                     {
  67.                         LT_New(Handle,
  68.                             LA_Type,    STRING_KIND,
  69.                             LA_LabelID,    MSG_CURSORPANEL_CURSOR_UP_GAD,
  70.                             LA_Chars,    30,
  71.                             LA_ID,        GAD_UP,
  72.                             GTST_MaxChars,    255,
  73.                         TAG_DONE);
  74.  
  75.                         LT_New(Handle,
  76.                             LA_Type,    STRING_KIND,
  77.                             LA_LabelID,    MSG_CURSORPANEL_CURSOR_DOWN_GAD,
  78.                             LA_Chars,    30,
  79.                             LA_ID,        GAD_DOWN,
  80.                             GTST_MaxChars,    255,
  81.                         TAG_DONE);
  82.  
  83.                         LT_New(Handle,
  84.                             LA_Type,    STRING_KIND,
  85.                             LA_LabelID,    MSG_CURSORPANEL_CURSOR_RIGHT_GAD,
  86.                             LA_Chars,    30,
  87.                             LA_ID,        GAD_RIGHT,
  88.                             GTST_MaxChars,    255,
  89.                         TAG_DONE);
  90.  
  91.                         LT_New(Handle,
  92.                             LA_Type,    STRING_KIND,
  93.                             LA_LabelID,    MSG_CURSORPANEL_CURSOR_LEFT_GAD,
  94.                             LA_Chars,    30,
  95.                             LA_ID,        GAD_LEFT,
  96.                             GTST_MaxChars,    255,
  97.                         TAG_DONE);
  98.  
  99.                         LT_EndGroup(Handle);
  100.                     }
  101.  
  102.                     LT_EndGroup(Handle);
  103.                 }
  104.  
  105.                 LT_New(Handle,
  106.                     LA_Type,VERTICAL_KIND,
  107.                 TAG_DONE);
  108.                 {
  109.                     LT_New(Handle,
  110.                         LA_Type,    XBAR_KIND,
  111.                         LAXB_FullSize,    TRUE,
  112.                     TAG_DONE);
  113.     
  114.                     LT_EndGroup(Handle);
  115.                 }
  116.  
  117.                 LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  118.                     LAGR_SameSize,    TRUE,
  119.                     LAGR_Spread,    TRUE,
  120.                 TAG_DONE);
  121.                 {
  122.                     LT_New(Handle,
  123.                         LA_Type,    BUTTON_KIND,
  124.                         LA_LabelID,    MSG_GLOBAL_USE_GAD,
  125.                         LA_ID,        GAD_USE,
  126.                         LABT_ReturnKey,    TRUE,
  127.                         LABT_ExtraFat,    TRUE,
  128.                     TAG_DONE);
  129.  
  130.                     LT_New(Handle,
  131.                         LA_Type,    BUTTON_KIND,
  132.                         LA_LabelID,    MSG_GLOBAL_LOAD_GAD,
  133.                         LA_ID,        GAD_LOAD,
  134.                         LABT_ExtraFat,    TRUE,
  135.                     TAG_DONE);
  136.  
  137.                     LT_New(Handle,
  138.                         LA_Type,    BUTTON_KIND,
  139.                         LA_LabelID,    MSG_GLOBAL_SAVE_GAD,
  140.                         LA_ID,        GAD_SAVE,
  141.                         LABT_ExtraFat,    TRUE,
  142.                     TAG_DONE);
  143.  
  144.                     LT_New(Handle,
  145.                         LA_Type,    BUTTON_KIND,
  146.                         LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  147.                         LA_ID,        GAD_CANCEL,
  148.                         LABT_EscKey,    TRUE,
  149.                         LABT_ExtraFat,    TRUE,
  150.                     TAG_DONE);
  151.  
  152.                     LT_EndGroup(Handle);
  153.                 }
  154.  
  155.                 LT_EndGroup(Handle);
  156.             }
  157.  
  158.             if(Window = LT_Layout(Handle,LocaleString(MSG_CURSORPANEL_CURSOR_PREFERENCES_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  159.                 LAWN_HelpHook,        &GuideHook,
  160.                 WA_DepthGadget,        TRUE,
  161.                 WA_CloseGadget,        TRUE,
  162.                 WA_DragBar,        TRUE,
  163.                 WA_RMBTrap,        TRUE,
  164.                 WA_Activate,        TRUE,
  165.             TAG_DONE))
  166.             {
  167.                 struct IntuiMessage    *Message;
  168.                 BOOLEAN             Done = FALSE;
  169.                 ULONG             MsgClass,
  170.                              MsgQualifier;
  171.                 UWORD             MsgCode;
  172.                 struct Gadget        *MsgGadget;
  173.                 UBYTE             DummyBuffer[MAX_FILENAME_LENGTH],
  174.                             *DummyChar;
  175.                 struct FileRequester    *FileRequest;
  176.                 LONG             Modifier = 0,i;
  177.  
  178.                 GuideContext(CONTEXT_CURSOR);
  179.  
  180.                 PushWindow(Window);
  181.  
  182.                 for(i = 0 ; i < 4 ; i++)
  183.                 {
  184.                     LT_SetAttributes(Handle,GAD_UP + i,
  185.                         GTST_String,Keys -> Keys[Modifier][i],
  186.                     TAG_DONE);
  187.                 }
  188.  
  189.                 do
  190.                 {
  191.                     if(Wait(PORTMASK(Window -> UserPort) | SIG_BREAK) & SIG_BREAK)
  192.                     {
  193.                         CopyMem(CursorKeys,Keys,sizeof(struct CursorKeys));
  194.  
  195.                         break;
  196.                     }
  197.  
  198.                     while(Message = (struct IntuiMessage *)GT_GetIMsg(Window -> UserPort))
  199.                     {
  200.                         MsgClass    = Message -> Class;
  201.                         MsgQualifier    = Message -> Qualifier;
  202.                         MsgCode        = Message -> Code;
  203.                         MsgGadget    = (struct Gadget *)Message -> IAddress;
  204.  
  205.                         GT_ReplyIMsg(Message);
  206.  
  207.                         LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  208.  
  209.                         if(MsgClass == IDCMP_CLOSEWINDOW)
  210.                         {
  211.                             CopyMem(CursorKeys,Keys,sizeof(struct CursorKeys));
  212.  
  213.                             Done = TRUE;
  214.                         }
  215.  
  216.                         if(MsgClass == IDCMP_GADGETUP)
  217.                         {
  218.                             switch(MsgGadget -> GadgetID)
  219.                             {
  220.                                 case GAD_QUALIFIER:
  221.  
  222.                                     for(i = 0 ; i < 4 ; i++)
  223.                                         strcpy(Keys -> Keys[Modifier][i],(STRPTR)LT_GetAttributes(Handle,GAD_UP + i,TAG_DONE));
  224.  
  225.                                     Modifier = MsgCode;
  226.  
  227.                                     for(i = 0 ; i < 4 ; i++)
  228.                                     {
  229.                                         LT_SetAttributes(Handle,GAD_UP + i,
  230.                                             GTST_String,Keys -> Keys[Modifier][i],
  231.                                         TAG_DONE);
  232.                                     }
  233.  
  234.                                     break;
  235.  
  236.                                 case GAD_USE:
  237.  
  238.                                     for(i = 0 ; i < 4 ; i++)
  239.                                         strcpy(Keys -> Keys[Modifier][i],(STRPTR)LT_GetAttributes(Handle,GAD_UP + i,TAG_DONE));
  240.  
  241.                                     CopyMem(Keys,CursorKeys,sizeof(struct CursorKeys));
  242.  
  243.                                     Done = TRUE;
  244.                                     break;
  245.  
  246.                                 case GAD_CANCEL:
  247.  
  248.                                     CopyMem(CursorKeys,Keys,sizeof(struct CursorKeys));
  249.  
  250.                                     Done = TRUE;
  251.                                     break;
  252.  
  253.                                 case GAD_LOAD:
  254.  
  255.                                     strcpy(DummyBuffer,LastCursorKeys);
  256.  
  257.                                     DummyChar = PathPart(DummyBuffer);
  258.  
  259.                                     *DummyChar = 0;
  260.  
  261.                                     LT_LockWindow(Window);
  262.  
  263.                                     if(FileRequest = GetFile(Window,LocaleString(MSG_CURSORPANEL_LOAD_CURSOR_KEYS_TXT),DummyBuffer,FilePart(LastCursorKeys),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  264.                                     {
  265.                                         if(!ReadIFFData(DummyBuffer,Keys,sizeof(struct CursorKeys),ID_KEYS))
  266.                                             ShowError(Window,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  267.                                         else
  268.                                         {
  269.                                             OldCRC = DoCRC(Keys,sizeof(struct CursorKeys));
  270.  
  271.                                             CursorKeysChanged = FALSE;
  272.  
  273.                                             strcpy(Config -> FileConfig -> CursorFileName,DummyBuffer);
  274.  
  275.                                             strcpy(LastCursorKeys,DummyBuffer);
  276.  
  277.                                             for(i = 0 ; i < 4 ; i++)
  278.                                             {
  279.                                                 LT_SetAttributes(Handle,GAD_UP + i,
  280.                                                     GTST_String,Keys -> Keys[Modifier][i],
  281.                                                 TAG_DONE);
  282.                                             }
  283.                                         }
  284.  
  285.                                         FreeAslRequest(FileRequest);
  286.                                     }
  287.  
  288.                                     LT_UnlockWindow(Window);
  289.  
  290.                                     break;
  291.  
  292.                                 case GAD_SAVE:
  293.  
  294.                                     strcpy(DummyBuffer,LastCursorKeys);
  295.  
  296.                                     DummyChar = PathPart(DummyBuffer);
  297.  
  298.                                     *DummyChar = 0;
  299.  
  300.                                     LT_LockWindow(Window);
  301.  
  302.                                     for(i = 0 ; i < 4 ; i++)
  303.                                         strcpy(Keys -> Keys[Modifier][i],(STRPTR)LT_GetAttributes(Handle,GAD_UP + i,TAG_DONE));
  304.  
  305.                                     if(FileRequest = GetFile(Window,LocaleString(MSG_CURSORPANEL_SAVE_CURSOR_KEYS_TXT),DummyBuffer,FilePart(LastCursorKeys),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  306.                                     {
  307.                                         if(!WriteIFFData(DummyBuffer,Keys,sizeof(struct CursorKeys),ID_KEYS))
  308.                                             ShowError(Window,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  309.                                         else
  310.                                         {
  311.                                             strcpy(LastCursorKeys,DummyBuffer);
  312.  
  313.                                             CursorKeysChanged = FALSE;
  314.  
  315.                                             OldCRC = DoCRC(Keys,sizeof(struct CursorKeys));
  316.                                         }
  317.  
  318.                                         FreeAslRequest(FileRequest);
  319.                                     }
  320.  
  321.                                     LT_UnlockWindow(Window);
  322.  
  323.                                     break;
  324.                             }
  325.                         }
  326.                     }
  327.                 }
  328.                 while(!Done);
  329.  
  330.                 PopWindow();
  331.             }
  332.  
  333.             LT_DeleteHandle(Handle);
  334.         }
  335.  
  336.         FreeVecPooled(Keys);
  337.     }
  338.  
  339.     CursorKeysChanged |= (OldCRC != DoCRC(CursorKeys,sizeof(struct CursorKeys)));
  340. }
  341.